package com.xique.park.service.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.xique.park.bean.domain.ParkInfo;
import com.xique.park.bean.dto.ParkInfoStatisticsDto;

import java.util.List;

/**
 * IParkInfoService
 *
 * @author wld
 * @date 2022/3/9 14:11
 */
public interface IParkInfoService extends IService<ParkInfo> {

    /**
     * 查询车场信息
     *
     * @param id 车场信息ID
     * @return 车场信息
     */
    ParkInfo selectParkInfoById(Long id);

    /**
     * 统计项目在线状态
     *
     * @param province   省编码
     * @param city       市编码
     * @param district   区县编码
     * @param deptId     服务商ID
     * @param parkInfoId 项目ID
     * @return 项目信息统计对象
     */
    ParkInfoStatisticsDto selectOnLineStatus(Integer province, Integer city, Integer district,
                                             Long deptId, Long parkInfoId);

    /**
     * 统计区域内的停车场数量
     *
     * @param province   省编码
     * @param city       市编码
     * @param district   区县编码
     * @param deptId     服务商ID
     * @param parkInfoId 项目ID
     * @return 停车场数量
     */
    Integer selectParkNum(Integer province, Integer city, Integer district,
                          Long deptId, Long parkInfoId);

    /**
     * 查询省市区内的项目
     *
     * @param country    国家编码
     * @param province   省编码
     * @param city       市编码
     * @param district   区县编码
     * @param deptId     服务商ID
     * @param parkInfoId 项目ID
     * @return 省市区内的项目列表
     */
    List<ParkInfoStatisticsDto> selectParkListByArea(Integer country, Integer province, Integer city, Integer district,
                                                     Long deptId, Long parkInfoId);

    /**
     * 根据服务商ID查询项目列表
     *
     * @param deptId 服务商ID
     * @return 项目列表
     */
    List<ParkInfo> getDeptId(Long deptId);

    /**
     * 根据服务商ID查询项目列表
     *
     * @param deptIdList 服务商ID列表
     * @return 项目列表
     */
    List<ParkInfo> getDeptIds(List<Long> deptIdList);

    /**
     * 查询车场信息
     *
     * @param id 车场信息ID
     * @return 车场信息
     */
    ParkInfo selectParkInfoWithAreaById(Long id);

    /**
     * 根据服务商id获取项目列表
     *
     * @param deptId 服务商ID
     * @return 项目列表
     */
    List<ParkInfo> selectParkInfoByDeptId(Long deptId);

    /**
     * 查询所有的项目
     *
     * @return 查询结果
     */
    List<ParkInfo> selectAll();

    /**
     *  附近的停车场
     * @param minlng
     * @param maxlng
     * @param minlat
     * @param maxlat
     * @param keyWord
     * @return
     */
    List<ParkInfo> selectNearByParkInfo(double minlng, double maxlng, double minlat, double maxlat,String keyWord);
}
